<template>
	<view class="baseForm">
		<!-- 搜索&扫码 -->
		<view class="upload-scan">
			<u-search
				v-model="searchContent"
				shape="round"
				bgColor="#fff"
				:show-action="true"
				actionText="搜索"
				:animation="true"
				class="search"
				@search="searchList"
				@clear="searchList"
				@custom="searchList"></u-search>
			<u-icon
				name="scan"
				size="27px"
				:bold="false"
				@click="scanHandle"></u-icon>
		</view>
		<!-- tab-bar切换 -->
		<view class="tab-bar">
			<u-tabs
				:current="activeTab"
				:list="tabList"
				:scrollable="false"
				:activeStyle="{
					color: '#000',
					fontWeight: 'bold',
					transform: 'scale(1.04)',
				}"
				lineWidth="50px"
				lineHeight="2px"
				lineColor="#007aff"
				@change="changeTab"></u-tabs>
		</view>

		<!-- 待点检 -->
		<view v-if="activeTab === 0" class="activeHeight">
			<!-- 列表 -->
			<u-list
				ref="tableScroll"
				@scrolltolower="scrolltolower"
				class="list"
				v-if="total"
				:height="listHeight"
				:lowerThreshold="100"
				:pagingEnabled="true">
				<u-list-item
					v-for="(item, index) in tableList"
					:key="item.id"
					@click="
						jumpEdit(
							'/eam/equ/accuracyInspection/edit',
							item.id,
							'0'
						)
					">
					<view class="card">
						<!-- 三种状态：待点检，点检中，点检完成 -->
						<view
							class="flex flex-col justify-between flex-1 h-full">
							<view class="record-content">
								<view class="record-item record-title">
									<text>{{ item.orderNo }}</text>
									<text>
										{{
											item?.orderStatus == 0
												? "待点检"
												: item?.orderStatus == 1
												? "点检中"
												: "已点检"
										}}
									</text>
								</view>
								<view class="record-item">
									<text>设备编号</text>
									<text>{{ item?.assetCode || "--" }}</text>
								</view>
								<view class="record-item">
									<text>计划时间</text>
									<text>{{ item?.planTime || "--" }}</text>
								</view>
								<view class="record-item">
									<text>点检标准</text>
									<text>
										{{ item?.sopStandardName || "--" }}
									</text>
								</view>
							</view>
						</view>
					</view>
				</u-list-item>
			</u-list>
			<view class="flex justify-center" v-show="tableLoading">
				<u-loading-icon color="#000a7b"></u-loading-icon>
			</view>
			<!-- 空数据 -->
			<view v-show="tableList.length === 0 && !tableLoading">
				<u-empty
					mode="list"
					icon="http://cdn.uviewui.com/uview/empty/list.png"></u-empty>
			</view>
		</view>

		<!-- 已点检 -->
		<view v-else class="activeHeight">
			<!-- 列表 -->
			<u-list
				@scrolltolower="finishScrolltolower"
				class="list"
				v-if="finishTotal"
				:height="listHeight"
				lowerThreshold="50px">
				<u-list-item
					v-for="(item, index) in finishTableList"
					:key="item.id"
					@click="
						jumpEdit(
							'/eam/equ/accuracyInspection/edit',
							item.id,
							'1'
						)
					">
					<view class="card">
						<!-- 三种状态：待点检，点检中，点检完成 -->
						<view
							class="flex flex-col justify-between flex-1 h-full">
							<view class="record-content">
								<view class="record-item record-title">
									<text>{{ item.orderNo }}</text>
									<text>
										{{
											item?.orderStatus == 0
												? "待点检"
												: item?.orderStatus == 1
												? "点检中"
												: "已点检"
										}}
									</text>
								</view>
								<view class="record-item">
									<text>设备编号</text>
									<text>{{ item?.assetCode || "--" }}</text>
								</view>
								<view class="record-item">
									<text>完成时间</text>
									<text>{{ item?.workTime || "--" }}</text>
								</view>
								<view class="record-item">
									<text>点检标准</text>
									<text>
										{{ item?.sopStandardName || "--" }}
									</text>
								</view>
								<view class="record-item">
									<text>点检结果</text>
									<text
										:class="
											item?.checkResult == 0
												? 'red-color'
												: ''
										">
										{{
											item?.checkResult == 0
												? "不合格"
												: item?.checkResult == 1
												? "合格"
												: "无"
										}}
									</text>
								</view>
							</view>
						</view>
					</view>
				</u-list-item>
			</u-list>
			<view class="flex justify-center" v-show="finishTableLoading">
				<u-loading-icon color="#000a7b"></u-loading-icon>
			</view>
			<!-- 空数据 -->
			<view v-show="finishTableList.length === 0 && !finishTableLoading">
				<u-empty
					mode="list"
					icon="http://cdn.uviewui.com/uview/empty/list.png"></u-empty>
			</view>
		</view>
	</view>
</template>

<script lang="ts" setup>
import { ref } from "vue";
import {
	onShow,
	onPullDownRefresh,
	onLoad,
	onBackPress,
} from "@dcloudio/uni-app";
import { http } from "@/utils/http";
import { PageResult, TabInfo } from "@/types/type";
import { getSecondTime } from "@/utils/common";
import { toScanCode } from "@/components/hs-scancode/scan.js";

// 监听返回按钮事件
onBackPress((option) => {
	if (option.from === "backbutton") {
		uni.switchTab({
			url: "/pages/index/index",
		});
	}
	return true;
});

function qrcodeSucess(data) {
	uni.showModal({
		title: "成功",
		content: data,
		success: () => {
			// uni.navigateBack({})
		},
	});
}
function qrcodeError(err) {
	console.log(err);
	uni.showModal({
		title: "摄像头授权失败",
		content: "摄像头授权失败，请检测当前浏览器是否有摄像头权限。",
		success: () => {
			// uni.navigateBack({})
		},
	});
}

const activeTab = ref(0);
const tabList = [{ name: "待点检" }, { name: "已点检" }];
function changeTab(val: TabInfo) {
	activeTab.value = val.index;
	if (val.index === 0 && !tableList.value.length) {
		loadmore();
	} else if (val.index === 1 && !finishTableList.value.length) {
		finishLoadmore();
	}
}

// 待完成数据
const tableList = ref([]);
const tableLoading = ref(false);
const current = ref(0);
const totalPage = ref(0);
const total = ref(0);

// 已完成数据
const finishTableList = ref([]);
const finishTableLoading = ref(false);
const finishCurrent = ref(0);
const finishTotalPage = ref(0);
const finishTotal = ref(0);

//列表高度
const listHeight = ref("");

// 已完成列表获取
async function finishLoadmore(type?: string) {
	try {
		finishCurrent.value += 1;
		finishTableLoading.value = true;
		const result: PageResult<any> = await http({
			method: "POST",
			url: "/eam/equPrecisionCheck/queryMyList",
			data: {
				current: finishCurrent.value,
				size: 20,
				data: {
					isChecked: 1,
					searchContent: searchContent.value,
				},
			},
		}).finally(() => {
			finishTableLoading.value = false;
		});
		const list = result.data;
		for (let i = 0; i < list.length; i++) {
			finishTableList.value.push(list[i]);
		}
		finishTotalPage.value = result.page;
		finishTotal.value = result.total;
		type === "refresh" && uni.stopPullDownRefresh();
	} catch (e) {
		console.log(e);
	}
}

onLoad(() => {
	// #ifdef H5
	listHeight.value = "calc(100vh - 84px - 44px)";
	// #endif

	// #ifdef APP-PLUS
	listHeight.value = "calc(100vh - 44px - 44px)";
	// #endif
	loadmore();
});

onPullDownRefresh(() => {
	searchList();
});

async function loadmore(type?: string) {
	try {
		current.value += 1;
		tableLoading.value = true;
		const result: PageResult<any> = await http({
			method: "POST",
			url: "/eam/equPrecisionCheck/queryMyList",
			data: {
				current: current.value,
				size: 20,
				data: {
					isChecked: 0,
					searchContent: searchContent.value,
				},
			},
		}).finally(() => {
			tableLoading.value = false;
		});
		const list = result.data;
		for (let i = 0; i < list.length; i++) {
			tableList.value.push(list[i]);
		}
		totalPage.value = result.page;
		total.value = result.total;
		type === "refresh" && uni.stopPullDownRefresh();
	} catch (e) {
		console.log(e);
	}
}
const scrolltolower = () => {
	totalPage.value > current.value && loadmore();
};

const finishScrolltolower = () => {
	finishTotalPage.value > finishCurrent.value && finishLoadmore();
};

function jumpEdit(item = "", id = "", read = "0") {
	uni.navigateTo({
		url: `/pages${item}?id=${id}&isRead=${read}`,
		fail: () => {
			uni.showToast({
				title: "敬请期待",
				icon: "error",
			});
		},
	});
}

// 点击扫码
const searchContent = ref("");
// function openScan() {
//   /* #ifdef H5 */
//   uni.showToast({
//     icon: "none",
//     title: "请到安卓设备进行扫码",
//   });
//   /* #endif */
//   // 只允许通过相机扫码
//   uni.scanCode({
//     scanType: ["barCode", "qrCode"],
//     onlyFromCamera: true,
//     success: function (res) {
//       searchContent.value = JSON.stringify(res.result);
//       searchList();
//       console.log("条码类型：" + res.scanType);
//       console.log("条码内容：" + res.result);
//     },
//   });
// }

function scanHandle() {
	toScanCode({
		onlyFromCamera: true, // 只允许通过相机扫码
	})
		.then((res) => {
			uni.showToast({
				icon: "success",
				title: "扫码成功",
			});
			searchContent.value = res;
			searchList();
		})
		.catch((e) => {
			uni.showToast({
				icon: "error",
				title: e,
			});
		});
}

// 列表搜索
function searchList() {
	// 当前作业
	current.value = 0;
	tableList.value = [];
	loadmore("refresh");
	// 历史作业
	finishCurrent.value = 0;
	finishTableList.value = [];
	finishLoadmore("refresh");
}
</script>

<style lang="scss" scoped>
uni-page-body {
	height: 100%;
	background-color: $primary-bg-color;
}
.search {
	:deep(.u-search__content) {
		box-shadow: 0 1px 8px 0px rgb(19 10 236 / 8%);
	}
}
.baseForm {
	background-color: $primary-bg-color;
	height: 100%;
	.tab-bar {
		padding: 0 40px;
	}
	.upload-scan {
		padding: $uni-page-padding;
		padding-top: 5px;
		padding-bottom: 1px;
		display: flex;
		align-items: center;
		// box-shadow: 0 1px 10px 0px rgb(19 10 236 / 10%);
		.u-icon {
			margin-left: 8px;
		}
	}
	.u-line {
		padding: 10px 0;
	}
}
.list {
	.card {
		margin: $uni-page-padding;
		margin-top: 4px;
		margin-bottom: 4px;
		border-radius: 7px;
		padding: 7px 10px 7px 10px;
		transition: all 300ms ease;
		box-shadow: 0 1px 5px rgba(19, 11, 236, 0.13);
		background-color: #fff;
		.card-flex {
			display: flex;
			align-items: flex-start;
		}
		.right {
			flex: 1;
		}
		.title {
			font-size: 14px;
			line-height: 40px;
			height: 40px;
			margin-top: 8px;
			font-weight: bold;
			color: #101010;
			border-top: 1px solid #e5ebff;
		}
		.uni-btn {
			float: right;
			font-size: 12px;
			height: 24px;
			line-height: 24px;
			padding: 0 15px;
			margin-top: 7px;
			font-weight: 400;
		}
		.des {
			font-size: 12px;
			line-height: 20px;
			// height: 20px;
			margin-bottom: 3px;
		}
		.left {
			// flex: 1;
			flex-basis: calc(50% + 10px);
		}
	}
}

.record-title {
	font-size: 15px;
	font-weight: bold;
	// margin: 10px 0 !important;
}
.record-footer {
	// height: 30px;
	display: flex;
	justify-content: flex-end;
	align-items: center;
	margin: 10px 0 17px;
	.record-btn {
		height: 30px;
		outline: none;
		border: none;
		line-height: 30px;
		border-radius: 6px;
		font-size: 14px;
		margin: 0px;
		margin-left: 10px;
		padding: 0 12px;
	}
	.reach {
		background-color: $primary-btn-color;
		color: #ffffff;
	}
	.canel {
		background-color: #ffffff;
		color: $primary-btn-color;
		// border: 1px solid $primary-btn-color;
	}
	.complete {
		background-color: #ffffff;
		color: $primary-btn-color;
		border: 1px solid $primary-btn-color;
	}
}
.u-loading-icon {
	margin: 8px 0;
}
.record-content .record-item > :first-child {
	min-width: 79px;
}
</style>
